// import com.alibaba.druid.sql.ast.statement.*;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear;
// import com.alibaba.druid.sql.dialect.oracle.ast.clause.*;
// import com.alibaba.druid.sql.dialect.oracle.ast.expr.*;
// import com.alibaba.druid.sql.dialect.oracle.ast.stmt.*;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include "../../../../sql/visitor/SQLASTVisitor.h"
#include "../../../../utils/BOOL.h"

class OracleASTVisitor : virtual public SQLASTVisitor
{
public:
  void endVisit(OracleSelectRestriction_CheckOption_ptr x) {}
  BOOL_ptr visit(OracleSelectRestriction_CheckOption_ptr x) { return BOOL::TRUE; }

  BOOL_ptr visit(OracleSelectRestriction_ReadOnly_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSelectRestriction_ReadOnly_ptr x) {}

  void endVisit(OracleUpdateStatement_ptr x);
  bool visit(OracleUpdateStatement_ptr x);

  BOOL_ptr visit(OracleAnalytic_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAnalytic_ptr x) {}

  BOOL_ptr visit(OracleAnalyticWindowing_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAnalyticWindowing_ptr x) {}

  bool visit(OracleDeleteStatement_ptr x);
  void endVisit(OracleDeleteStatement_ptr x);

  BOOL_ptr visit(OracleIntervalExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleIntervalExpr_ptr x) {}

  BOOL_ptr visit(OracleOuterExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleOuterExpr_ptr x) {}

  BOOL_ptr visit(OracleSelectJoin_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSelectJoin_ptr x) {}

  BOOL_ptr visit(OracleSelectSubqueryTableSource_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSelectSubqueryTableSource_ptr x) {}

  BOOL_ptr visit(SampleClause_ptr x) { return BOOL::TRUE; }
  void endVisit(SampleClause_ptr x) {}

  BOOL_ptr visit(OracleSelectTableReference_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSelectTableReference_ptr x) {}

  BOOL_ptr visit(PartitionExtensionClause_ptr x) { return BOOL::TRUE; }
  void endVisit(PartitionExtensionClause_ptr x) {}

  BOOL_ptr visit(OracleWithSubqueryEntry_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleWithSubqueryEntry_ptr x) {}

  BOOL_ptr visit(SearchClause_ptr x) { return BOOL::TRUE; }
  void endVisit(SearchClause_ptr x) {}

  BOOL_ptr visit(CycleClause_ptr x) { return BOOL::TRUE; }
  void endVisit(CycleClause_ptr x) {}

  BOOL_ptr visit(OracleBinaryFloatExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleBinaryFloatExpr_ptr x) {}

  BOOL_ptr visit(OracleBinaryDoubleExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleBinaryDoubleExpr_ptr x) {}

  BOOL_ptr visit(OracleCursorExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleCursorExpr_ptr x) {}

  BOOL_ptr visit(OracleIsSetExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleIsSetExpr_ptr x) {}

  BOOL_ptr visit(ModelClause_ReturnRowsClause_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_ReturnRowsClause_ptr x) {}

  BOOL_ptr visit(ModelClause_MainModelClause_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_MainModelClause_ptr x) {}

  BOOL_ptr visit(ModelClause_ModelColumnClause_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_ModelColumnClause_ptr x) {}

  BOOL_ptr visit(ModelClause_QueryPartitionClause_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_QueryPartitionClause_ptr x) {}

  BOOL_ptr visit(ModelClause_ModelColumn_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_ModelColumn_ptr x) {}

  BOOL_ptr visit(ModelClause_ModelRulesClause_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_ModelRulesClause_ptr x) {}

  BOOL_ptr visit(ModelClause_CellAssignmentItem_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_CellAssignmentItem_ptr x) {}

  BOOL_ptr visit(ModelClause_CellAssignment_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_CellAssignment_ptr x) {}

  BOOL_ptr visit(ModelClause_ptr x) { return BOOL::TRUE; }
  void endVisit(ModelClause_ptr x) {}

  BOOL_ptr visit(OracleReturningClause_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleReturningClause_ptr x) {}

  bool visit(OracleInsertStatement_ptr x);
  void endVisit(OracleInsertStatement_ptr x);

  BOOL_ptr visit(OracleMultiInsertStatement_InsertIntoClause_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleMultiInsertStatement_InsertIntoClause_ptr x) {}

  BOOL_ptr visit(OracleMultiInsertStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleMultiInsertStatement_ptr x) {}

  BOOL_ptr visit(OracleMultiInsertStatement_ConditionalInsertClause_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleMultiInsertStatement_ConditionalInsertClause_ptr x) {}

  BOOL_ptr visit(OracleMultiInsertStatement_ConditionalInsertClauseItem_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleMultiInsertStatement_ConditionalInsertClauseItem_ptr x) {}

  bool visit(OracleSelectQueryBlock_ptr x);
  void endVisit(OracleSelectQueryBlock_ptr x);

  BOOL_ptr visit(OracleLockTableStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleLockTableStatement_ptr x) {}

  BOOL_ptr visit(OracleAlterSessionStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterSessionStatement_ptr x) {}

  BOOL_ptr visit(OracleDatetimeExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleDatetimeExpr_ptr x) {}

  BOOL_ptr visit(OracleSysdateExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSysdateExpr_ptr x) {}

  BOOL_ptr visit(OracleExceptionStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleExceptionStatement_ptr x) {}

  BOOL_ptr visit(OracleExceptionStatement_Item_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleExceptionStatement_Item_ptr x) {}

  BOOL_ptr visit(OracleArgumentExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleArgumentExpr_ptr x) {}

  BOOL_ptr visit(OracleSetTransactionStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSetTransactionStatement_ptr x) {}

  BOOL_ptr visit(OracleExplainStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleExplainStatement_ptr x) {}

  BOOL_ptr visit(OracleAlterTableDropPartition_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableDropPartition_ptr x) {}

  BOOL_ptr visit(OracleAlterTableTruncatePartition_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableTruncatePartition_ptr x) {}

  BOOL_ptr visit(OracleAlterTableSplitPartition_TableSpaceItem_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableSplitPartition_TableSpaceItem_ptr x) {}

  BOOL_ptr visit(OracleAlterTableSplitPartition_UpdateIndexesClause_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableSplitPartition_UpdateIndexesClause_ptr x) {}

  BOOL_ptr visit(OracleAlterTableSplitPartition_NestedTablePartitionSpec_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableSplitPartition_NestedTablePartitionSpec_ptr x) {}

  BOOL_ptr visit(OracleAlterTableSplitPartition_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableSplitPartition_ptr x) {}

  BOOL_ptr visit(OracleAlterTableModify_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableModify_ptr x) {}

  bool visit(OracleCreateIndexStatement_ptr x);
  void endVisit(OracleCreateIndexStatement_ptr x);

  BOOL_ptr visit(OracleForStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleForStatement_ptr x) {}

  BOOL_ptr visit(OracleRangeExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleRangeExpr_ptr x) {}

  BOOL_ptr visit(OraclePrimaryKey_ptr x) { return BOOL::TRUE; }
  void endVisit(OraclePrimaryKey_ptr x) {}

  bool visit(OracleCreateTableStatement_ptr x);

  void endVisit(OracleCreateTableStatement_ptr x);

  BOOL_ptr visit(OracleStorageClause_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleStorageClause_ptr x) {}

  BOOL_ptr visit(OracleGotoStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleGotoStatement_ptr x) {}

  BOOL_ptr visit(OracleLabelStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleLabelStatement_ptr x) {}

  BOOL_ptr visit(OracleAlterTriggerStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTriggerStatement_ptr x) {}

  BOOL_ptr visit(OracleAlterSynonymStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterSynonymStatement_ptr x) {}

  BOOL_ptr visit(OracleAlterViewStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterViewStatement_ptr x) {}

  BOOL_ptr visit(OracleAlterTableMoveTablespace_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableMoveTablespace_ptr x) {}

  BOOL_ptr visit(OracleAlterTableRowMovement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableRowMovement_ptr x) {}

  BOOL_ptr visit(OracleAlterTableShrinkSpace_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTableShrinkSpace_ptr x) {}

  BOOL_ptr visit(OracleAlterSummaryStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterSummaryStatement_ptr x) {}

  BOOL_ptr visit(OracleFileSpecification_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleFileSpecification_ptr x) {}

  BOOL_ptr visit(OracleAlterTablespaceAddDataFile_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTablespaceAddDataFile_ptr x) {}

  BOOL_ptr visit(OracleAlterTablespaceStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleAlterTablespaceStatement_ptr x) {}

  BOOL_ptr visit(OracleExitStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleExitStatement_ptr x) {}

  BOOL_ptr visit(OracleContinueStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleContinueStatement_ptr x) {}

  BOOL_ptr visit(OracleRaiseStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleRaiseStatement_ptr x) {}

  BOOL_ptr visit(OracleCreateDatabaseDbLinkStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleCreateDatabaseDbLinkStatement_ptr x) {}

  BOOL_ptr visit(OracleDropDbLinkStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleDropDbLinkStatement_ptr x) {}

  BOOL_ptr visit(OracleDataTypeIntervalYear_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleDataTypeIntervalYear_ptr x) {}

  BOOL_ptr visit(OracleDataTypeIntervalDay_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleDataTypeIntervalDay_ptr x) {}

  BOOL_ptr visit(OracleUsingIndexClause_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleUsingIndexClause_ptr x) {}

  BOOL_ptr visit(OracleLobStorageClause_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleLobStorageClause_ptr x) {}

  bool visit(OracleUnique_ptr x);
  void endVisit(OracleUnique_ptr x);

  bool visit(OracleForeignKey_ptr x);
  void endVisit(OracleForeignKey_ptr x);

  bool visit(OracleCheck_ptr x);
  void endVisit(OracleCheck_ptr x);

  BOOL_ptr visit(OracleSupplementalIdKey_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSupplementalIdKey_ptr x) {}

  BOOL_ptr visit(OracleSupplementalLogGrp_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleSupplementalLogGrp_ptr x) {}

  BOOL_ptr visit(OracleCreateTableStatement_Organization_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleCreateTableStatement_Organization_ptr x) {}

  BOOL_ptr visit(OracleCreateTableStatement_OIDIndex_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleCreateTableStatement_OIDIndex_ptr x) {}

  BOOL_ptr visit(OracleCreatePackageStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleCreatePackageStatement_ptr x) {}

  BOOL_ptr visit(OracleExecuteImmediateStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleExecuteImmediateStatement_ptr x) {}

  BOOL_ptr visit(OracleTreatExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleTreatExpr_ptr x) {}

  BOOL_ptr visit(OracleCreateSynonymStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleCreateSynonymStatement_ptr x) {}

  BOOL_ptr visit(OracleCreateTypeStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleCreateTypeStatement_ptr x) {}

  BOOL_ptr visit(OraclePipeRowStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OraclePipeRowStatement_ptr x) {}

  BOOL_ptr visit(OracleIsOfTypeExpr_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleIsOfTypeExpr_ptr x) {}

  BOOL_ptr visit(OracleRunStatement_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleRunStatement_ptr x) {}

  BOOL_ptr visit(OracleXmlColumnProperties_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleXmlColumnProperties_ptr x) {}

  BOOL_ptr visit(OracleXmlColumnProperties_OracleXMLTypeStorage_ptr x) { return BOOL::TRUE; }
  void endVisit(OracleXmlColumnProperties_OracleXMLTypeStorage_ptr x) {}
};
